<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>05姓名案例-watch实现</title>
  <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
       姓：<input type="text" v-model="firstName"> <br><br>
       名：<input type="text" v-model="lastName"> <br><br>
       全名：{{fullName}} <br><br>

    </div>
    <script type='text/javascript'>
        new Vue({
            el:'#root',
            data:{
               firstName:'张',
               lastName:'三',
               fullName:'张-三'
            },
            watch:{
                // (1)监听每个属性，一有变化就加上
                firstName(newValue){
                    this.fullName = newValue + '-' + this.lastName
                },
                /**
                 * (2)watch可以处理异步任务
                 * (3)根本原因是它watch里不需要返回值，它只能对已有的数据进行处理但不返回
                 * */ 
                lastName(newValue){
                    setTimeout(() => {
                        this.fullName = this.firstName + '-' + newValue
                    }, 1000);
                }
                /**
                 * (4)computed和watch的对别
                 *    1.能用computed实现的，watch都能实现(可能就是麻烦些)
                 *    2.但watch能实现的computed不一定能实现，比如异步任务
                 * (5)可以使用箭头函数的地方：定时器回调函数、ajax回调函数、promise回调函数
                 *    可以使用是因为这些和Vue实例没有关系
                */
            }
        })
    </script>
</body>
</html>